#!/usr/bin/env php
<?php

$code = 0;
Swoole\Coroutine::set(['exit_condition' => function(){
    return Swoole\Coroutine::stats()['coroutine_num'] === 0;
}]);
Swoole\Coroutine::create(function () use (&$code) {
    if (version_compare('7.1.0', PHP_VERSION, '>')) {
        fwrite(
            STDERR,
            sprintf(
                'This version of PHPUnit is supported on PHP 7.1 and PHP 7.2.' . PHP_EOL .
                'You are using PHP %s (%s).' . PHP_EOL,
                PHP_VERSION,
                PHP_BINARY
            )
        );

        die(1);
    }

    if (! ini_get('date.timezone')) {
        ini_set('date.timezone', 'UTC');
    }

    $dirs = [
        getcwd() . '/vendor/autoload.php',
        __DIR__ . '/../../autoload.php',
        __DIR__ . '/../vendor/autoload.php',
        __DIR__ . '/vendor/autoload.php',
    ];

    foreach ($dirs as $file) {
        if (file_exists($file)) {
            define('PHPUNIT_COMPOSER_INSTALL', $file);

            break;
        }
    }

    unset($file);

    if (! defined('PHPUNIT_COMPOSER_INSTALL')) {
        fwrite(
            STDERR,
            'You need to set up the project dependencies using Composer:' . PHP_EOL . PHP_EOL .
            '    composer install' . PHP_EOL . PHP_EOL .
            'You can learn all about Composer on https://getcomposer.org/.' . PHP_EOL
        );

        die(1);
    }

    $options = getopt('', ['prepend:']);

    if (isset($options['prepend'])) {
        require $options['prepend'];
    }

    unset($options);

    require PHPUNIT_COMPOSER_INSTALL;

    $code = PHPUnit\TextUI\Command::main(false);

    Swoole\Timer::clearAll();
});

swoole_event_wait();

exit($code);
